import { spawn } from 'child_process';
import path from 'path';

// 定义要启动的应用
const apps = [
  { name: 'vue-base', filter: 'vue-base', color: '\x1b[36m' }, // 青色
  { name: 'vue-app1', filter: 'vue-app1', color: '\x1b[32m' }, // 绿色
  { name: 'vue-app2', filter: 'vue-app2', color: '\x1b[33m' }, // 黄色
  { name: 'vue-build', filter: 'vue-build', color: '\x1b[35m', port: 9003 } // 紫色，端口9003
];

// 清除控制台
console.clear();
console.log('\x1b[1m%s\x1b[0m', '启动Vue微前端应用...\n');

// 启动所有应用
const processes = apps.map(app => {
  console.log(`${app.color}%s\x1b[0m`, `[${app.name}] 正在启动...`);
  
  // 使用pnpm过滤器启动特定应用
  const proc = spawn('pnpm', ['--filter', app.filter, 'dev'], {
    stdio: 'pipe',
    shell: true
  });
  
  // 处理标准输出
  proc.stdout.on('data', (data) => {
    const lines = data.toString().trim().split('\n');
    lines.forEach(line => {
      if (line.trim()) {
        let extra = '';
        if (app.name === 'vue-build' && line.includes('Local')) {
          extra = ` (端口: 9003)`;
        }
        console.log(`${app.color}%s\x1b[0m`, `[${app.name}] ${line}${extra}`);
      }
    });
  });
  
  // 处理标准错误
  proc.stderr.on('data', (data) => {
    const lines = data.toString().trim().split('\n');
    lines.forEach(line => {
      if (line.trim()) {
        console.log(`${app.color}%s\x1b[31m`, `[${app.name}] `, `${line}\x1b[0m`);
      }
    });
  });
  
  // 处理进程退出
  proc.on('close', (code) => {
    if (code !== 0) {
      console.log(`${app.color}%s\x1b[31m`, `[${app.name}]`, ` 进程退出，退出码 ${code}\x1b[0m`);
    } else {
      console.log(`${app.color}%s\x1b[0m`, `[${app.name}] 进程已退出`);
    }
  });
  
  return proc;
});

// 处理主进程的退出
process.on('SIGINT', () => {
  console.log('\n\x1b[1m%s\x1b[0m', '正在关闭所有应用...');
  processes.forEach((proc, i) => {
    proc.kill('SIGINT');
    console.log(`${apps[i].color}%s\x1b[0m`, `[${apps[i].name}] 已发送终止信号`);
  });
  process.exit(0);
}); 